package com.springboot.demo.service;

import com.springboot.demo.entity.*;
import com.springboot.demo.entity.data.MsgData;

import java.util.List;

/**
 * @author wubc683
 * @desc
 * @date 2021-09-13 9:17
 */
public interface DeviceService {
    /**
     * 获取设备群信息
     * @param ownerId
     * @param cid
     * @return: com.springboot.demo.entity.DeviceCluster
     */
    DeviceCluster getDevClusterInfo(Long ownerId,Long cid);

    /**
     * 创建设备群
     * @param ownerId
     * @param deviceCluster
     * @return: void
     */
    void createDevCluster(Long ownerId, DeviceCluster deviceCluster);

    /**
     * 修改设备群信息
     * @param ownerId
     * @param deviceCluster
     * @return: void
     */
    void updateDevCluster(Long ownerId, DeviceCluster deviceCluster);

    /**
     * 获取用户所有设备群信息
     * @param pageRequest
     * @param ownerId
     * @return: java.util.List<com.springboot.demo.entity.DeviceCluster>
     */
    PageResult getAllDevClusterInfo(PageRequest pageRequest,Long ownerId);

    /**
     * 获取设备群所有用户信息
     * @param pageRequest
     * @param ownerId
     * @param cid
     * @return: com.springboot.demo.entity.PageResult
     */
    PageResult getDevClusterUserInfo(PageRequest pageRequest,Long ownerId, Long cid);

    /**
     * 删除设备群
     * @param ownerId
     * @param clusterId
     * @return: void
     */
    void delDevCluster(Long ownerId, Long clusterId);

//    /**
//     * 移交设备群
//     * @param ownerId
//     * @param username
//     * @param clusterId
//     * @return: void
//     */
//    void transferDevCluster(Long ownerId, String username, Long clusterId);

//    /**
//     * 批量移交设备群中设备给其他设备群
//     * @param ownerId
//     * @param username
//     * @param clusterId
//     * @param name
//     * @param deviceIds
//     * @return: void
//     */
//    void applyTransferDev2DevCluster(Long ownerId, String username,Long clusterId, String name, List<Long> deviceIds);

//    /**
//     * 批准或者拒绝批量移交设备群中设备给其他设备群
//     * @param ownerId
//     * @param username
//     * @param msgData
//     * @return: void
//     */
//    void replyTransferDev2DevCluster(Long ownerId, String username, MsgData msgData);

//    /**
//     * 认领设备
//     * @param uid
//     * @param deviceId
//     * @param pwd
//     * @return: void
//     */
//    void claimDevCluster(Long uid, Long deviceId,String pwd);

    /**
     * 授权设备群一些设备给群内成员
     * @param ownerId
     * @param userIds
     * @param deviceId
     * @param auth
     * @return: void
     */
    void authDev2Other(Long ownerId, List<Long> userIds, Long deviceId,Integer auth);

    /**
     * 批量删除设备
     * @param uid
     * @param deviceIds
     * @return: void
     */
    void delDevices(Long uid, List<Long> deviceIds);

    /**
     * 变更设备群用户权限
     * @param ownerId
     * @param cid
     * @param uid
     * @param rid
     * @return: void
     */
    void authDevClusterUser(Long ownerId, Long cid, Long uid, Integer rid);

    /**
     * 邀请用户加入设备群
     * @param uid
     * @param cid
     * @param name
     * @return: void
     */
    void inviteDevClusterUser(Long uid, Long cid, String name);

    /**
     * 回复邀请用户加入设备群
     * @param uid
     * @param msgData
     * @return: void
     */
    void replyInviteDevClusterUser(Long uid, MsgData msgData);

    /**
     * 将用户踢出设备群
     * @param ownerId
     * @param cid
     * @param uid
     * @return: void
     */
    void delDevClusterUser(Long ownerId, Long cid, Long uid);

    /**
     * 退出设备群
     * @param uid
     * @param cid
     * @return: void
     */
    void quitDevCluster(Long uid, Long cid);

    /**
     * 查找设备群
     * @param pageRequest
     * @param uid
     * @param name
     * @return: PageResult
     */
    PageResult findDevCluster(PageRequest pageRequest,Long uid, String name);

    /**
     * 获取我的设备信息
     * @param pageRequest
     * @param uid
     * @return: com.springboot.demo.entity.PageResult
     */
    PageResult getMyDevicesInfo(PageRequest pageRequest, Long uid);

    /**
     * 批量删除我的设备
     * @param uid
     * @param deviceIds
     * @return: void
     */
    void delMyDevices(Long uid, List<Long> deviceIds);

    /**
     * 获取设备信息
     * @param uid
     * @param id
     * @return: com.springboot.demo.entity.Device
     */
    Device getDeviceInfo(Long uid, Long id);

    /**
     * 修改设备信息
     * @param uid
     * @param device
     * @return: void
     */
    void updateDeviceInfo(Long uid, Device device);

    /**
     * 获取设备群设备信息
     * @param pageRequest
     * @param state
     * @param search
     * @param sort
     * @param ownerId
     * @param cid
     * @return: com.springboot.demo.entity.PageResult
     */
    PageResult getDevClusterDevInfo(PageRequest pageRequest, Integer state, String search,
                                    String sort, Long ownerId, Long cid);

    /**
     * 从mico获取设备信息
     * @param implUser
     * @param username
     * @param password
     * @param pageRequest
     * @param sort
     * @param search
     * @return: com.springboot.demo.entity.PageResult
     */
    PageResult getDevInfoFromMico(User implUser, String username, String password,PageRequest pageRequest,
                                        String sort,String search);

    /**
     * 从mico客户端段导入设备到web服务器
     * @param implUser
     * @param username
     * @param password
     * @param cid
     * @param deviceIds
     * @return: void
     */
    void addDevicesFromMico(User implUser, String username,String password,Long cid,List<Long> deviceIds);

    /**
     * 申请加入设备群
     * @param uid
     * @param cid
     * @return: void
     */
    void applyJoinDevCluster(Long uid, Long cid);

    /**
     * 批准申请加入设备群
     * @param uid
     * @param msgData
     * @return: void
     */
    void replyApplyJoinDevCluster(Long uid, MsgData msgData);

    /**
     * 获取设备能授权或取消授权的用户
     * @param implUser
     * @param deviceId
     * @param auth
     * @param pageRequest
     * @return: com.springboot.demo.entity.PageResult
     */
    PageResult getDeviceAuthorityUsers(User implUser, Long deviceId, Integer auth,PageRequest pageRequest);
}
